package com.baofu.paycore.service.facade;

import com.baofu.paycore.service.facade.model.*;
import com.baofu.paycore.service.facade.model.pay.PayQueryDetailRespDTO;
import com.baofu.paycore.service.facade.model.recharge.RechargeDetailRespDTO;
import com.baofu.paycore.service.facade.model.transfer.TransferDetailRespDTO;
import com.system.commons.result.PageReqDTO;
import com.system.commons.result.PageRespDTO;
import com.system.commons.result.Result;

import java.util.List;

/**
 * description: 支付交易查询
 *
 * <p>
 *      1.根据支付单号查询交易
 *      2.根据订单号查询交易
 *      3.分页查询支付信息
 *      4.依支付单号查询支付明细信息
 *      5.依支付单号查询转账明细信息
 *      6.依支付单号查询充值/提现明细信息
 *      7.依条件查询支付明细信息
 * </p>
 * User: liu ting  Date: 2016/5/24 ProjectName: paycore Version: 1.0
 */
public interface PayQueryServiceFacade {

    /**
     * 1.根据支付单号查询交易
     *
     * @param payNo 支付单号
     * @param serviceCode 服务码
     * @param traceLogId 日志ID
     * @return 交易对象
     */
    Result<PayResDTO> queryByPayNo(String payNo, String serviceCode, String traceLogId);

    /**
     * 2.根据订单号查询交易
     *
     * @param queryReqDTO 条件对象
     * @param traceLogId 日志ID
     * @return 交易对象
     */
    Result<PayResDTO> queryByOrderNo(PayQueryReqDTO queryReqDTO, String traceLogId);

    /**
     * 分页查询支付信息
     *
     * @param payPageQueryReqDTO        查询请求参数
     * @param pageReqDTO                分页查询参数
     * @param traceLogId                日志ID
     * @return                          支付信息
     */
    Result<PageRespDTO<PayQueryRespDTO>> queryPayInfoByPage(PayPageQueryReqDTO payPageQueryReqDTO, PageReqDTO pageReqDTO,
                                                            String traceLogId);

    /**
     * 依支付单号查询支付明细信息
     *
     * @param payNo         支付单号
     * @param traceLogId    日志ID
     * @return              支付明细信息
     */
    Result<PayQueryDetailRespDTO> queryPayDetailByPayNo(String payNo, String traceLogId);

    /**
     * 依支付单号查询转账明细信息
     *
     * @param payQueryReqDTO        支付单号
     * @param traceLogId            日志ID
     * @return                      转账明细信息
     */
    Result<TransferDetailRespDTO> queryTransferByPayNo(PayQueryReqDTO payQueryReqDTO, String traceLogId);

    /**
     * 依支付单号查询充值/提现明细信息
     *
     * @param payQueryReqDTO        查询参数条件
     * @param traceLogId            日志ID
     * @return                      充值/提现明细信息
     */
    Result<RechargeDetailRespDTO> queryRechargeByPayNo(PayQueryReqDTO payQueryReqDTO, String traceLogId);

    /**
     * 依条件查询支付明细信息
     *
     * @param payQueryReqDTO      查询参数条件
     * @param traceLogId          日志ID
     * @return                    支付明细信息
     */
    Result<PayQueryDetailRespDTO> queryPayDetailInfoByPay(PayQueryReqDTO payQueryReqDTO, String traceLogId);

    /**
     * 依条件分页查询支付订单差异状态信息
     *
     * @param payDiffOrderReqDTO  查询参数条件
     * @param traceLogId          日志ID
     * @return                    支付单信息
     */
    Result<PageRespDTO<PayDiffOrderRespDTO>> queryPayDiffOrderByParam(PayDiffOrderReqDTO payDiffOrderReqDTO, String traceLogId);


    /**
     * 依支付单号查询账务信息
     *
     * @param payNo      支付单号
     * @param traceLogId 日志ID
     * @return 支付明细信息
     */
    Result<List<ClearAccountResDTO>> queryAccountDetailByPayNo(String payNo, String traceLogId);


    /**
     *  依支付单号查询账务相关信息
     *
     * @param payNo             支付单号
     * @param serviceCode       服务编号
     * @param traceLogId        日志ID
     * @return                  Result<List<ClearAccountResDTO>>
     */
    Result<List<ClearAccountResDTO>> queryAccountDetailByPayNo(String payNo,String serviceCode, String traceLogId);
}